const express = require("express")
const joi = require('joi')
const app = express()

//跨域配置
const cors = require("cors")

app.use(cors())

//配置解析 application/x-www-form-urlencoded 格式的表单数据的中间件：
app.use(express.urlencoded({extended:false}))

//导入解析token包和密钥 需要配置在路由中间件之前
const expressjwt = require('express-jwt')
const screct = require("./config")

//挂载到app.use上去 解析后的值可以在app.user打印出来



//设置中间件
app.use((req,res,next)=>{
    // @ts-ignore
    res.cc=(err,status=1)=>{
      res.send({
          status,
          message:err instanceof Error ? err.message:err
      })
    },
    next()
})
//挂载到app.use上去 解析后的值可以在app.user打印出来 这个要放正中间件之后，路由中间件之前
app.use(expressjwt({ secret: screct.jwtSecretKey, algorithms: ["HS256"], credentialsRequired: false, }).unless({ path: [/^\/api\//] }));
//配置路由
const router = require("./router")
app.use("/api",router)
const my = require("./router/my")
app.use("/my",my)
const mycate = require("./router/mycate.js")
app.use("/my/article",mycate)
const addActricle = require("./router/article")
app.use("/my/article",addActricle)


//全局错误中间件设置在路由之后
app.use((err,req,res,next)=>{
    if (err instanceof joi.ValidationError) return res.cc(err)
    //身份验证失败
    if (err.name == 'UnauthorizedError') return res.cc("身份认证失败",300)
    // 未知错误
     res.cc(err)

})

app.listen(8080,()=>{
    console.log("webServer runing!!");
})
